#   Copyright (C) 2008      Tri Tech Information Systems Inc.
# 
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
# 
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
# 
#   You should have received a copy of the GNU General Public License along
#   with this program; if not, write to the Free Software Foundation, Inc.,
#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#   
from pyxx.formatters import *
from pyxx.klass import ClassWrapper

class ExceptionWrapper( ClassWrapper ):
    TEMPLATE = '''
    struct %(name)s : public %(qualifiedName)s
    {

        static bool __Ready()
        {
            %(readylines)s

            return true;
        }
        static void __WrapClass()
        {
            %(setup_scope)s
            exception_< %(templateargs)s >( %(args)s )
            %(methodlist)s
                ;

            %(extras)s                

        };

        static RegisterWrapper<%(name)s> register_class;
    };        
    RegisterWrapper<%(name)s> %(name)s::register_class("%(module)s");
    '''
    @generator
    @formatter( argument_list )
    def generate_args( self ):
        return [ self.quoted_python_name ]

    @formatter( argument_list )
    def generate_templateargs( self ):
        return [ self.qualifiedName ] + self.bases

